package cn.iocoder.yudao.module.member.service.shunfengcheorder;


import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.member.controller.admin.shunfengcheorder.vo.ShunfengcheOrderCreateReqVO;
import cn.iocoder.yudao.module.member.controller.admin.shunfengcheorder.vo.ShunfengcheOrderExportReqVO;
import cn.iocoder.yudao.module.member.controller.admin.shunfengcheorder.vo.ShunfengcheOrderPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.shunfengcheorder.vo.ShunfengcheOrderUpdateReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.shunfengcheorder.ShunfengcheOrderDO;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;


/**
 * 公众号顺风车订单 Service 接口
 *
 * @author 路小强
 */
public interface ShunfengcheOrderService {

    /**
     * 创建公众号顺风车订单
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createShunfengcheOrder(@Valid ShunfengcheOrderCreateReqVO createReqVO);

    /**
     * 更新公众号顺风车订单
     *
     * @param updateReqVO 更新信息
     */
    void updateShunfengcheOrder(@Valid ShunfengcheOrderUpdateReqVO updateReqVO);

    /**
     * 删除公众号顺风车订单
     *
     * @param id 编号
     */
    void deleteShunfengcheOrder(Long id);

    /**
     * 获得公众号顺风车订单
     *
     * @param id 编号
     * @return 公众号顺风车订单
     */
    ShunfengcheOrderDO getShunfengcheOrder(Long id);

    /**
     * 获得公众号顺风车订单列表
     *
     * @param ids 编号
     * @return 公众号顺风车订单列表
     */
    List<ShunfengcheOrderDO> getShunfengcheOrderList(Collection<Long> ids);

    /**
     * 获得公众号顺风车订单分页
     *
     * @param pageReqVO 分页查询
     * @return 公众号顺风车订单分页
     */
    PageResult<ShunfengcheOrderDO> getShunfengcheOrderPage(ShunfengcheOrderPageReqVO pageReqVO);

    /**
     * 获得公众号顺风车订单列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 公众号顺风车订单列表
     */
    List<ShunfengcheOrderDO> getShunfengcheOrderList(ShunfengcheOrderExportReqVO exportReqVO);

    /**
     * 取消订单
     *
     * @param id
     * @param status
     * @return
     */
    Boolean changeOrderStatus(Long id, int status);


    Boolean reSend(Long id);

    /**
     * 取消超时订单
     *
     * @return
     */
    int cancelTimeOutOrder();
}
